/******************************************************************************
 *      Mestrado em Ciência da Computação - UFMS
 *		Redes de Computadores - Prof. Dr. Ronaldo Alves Ferreira
 *		Alunos: Geraldo Landre, Marcel Tolentino, Vinícius Bueno
 *****************************************************************************/

#ifndef CGIBIN_H
#define CGIBIN_H

#include "base.h"
#include "server.h"
#include "request.h"

#define CGI_CALL_PROGRAM_BUFFER 256
#define CGI_SUBPATH "/cgi-bin"

/*****************************************************************
 * get_cgibin_folder_path -	retorna o caminho da raiz até
 *					a pasta do cgi-bin: ROOT_DIR + CGI_SUBPATH
 *
 * parametros:
 *	**path:		parâmetro de retorno, será atribuído com a
 *					o caminho completo da pasta do cgibin
 *
 * retorno: length de **path se tudo der certo; -1 em caso de erro
 *****************************************************************/
int get_cgibin_folder_path(vstring *path);

/*****************************************************************
 * call_program -	executa o programa passado por parâmetro
 *					através da chamada de sistema popen()
 *
 * parametros:
 *	*command_line:	linha de comando do programa a ser executado
 *	**output:		parâmetro de retorno, será atribuído com a
 *					saída do programa
 *	**hd:			parâmetro de retorno, será atribuído com dados
 *					do cabeçalho
 *
 * retorno: length de *output se tudo der certo; -1 em caso de erro
 *****************************************************************/
int call_program(vstring *command,vstring *output,header_data **hd);

/*****************************************************************
 * cgibin_exec -	tenta executar o programa passado pela url
 *					escreve a saída do programa em output
 *
 * parametros:
 *	*url:			url contendo o comando e os parâmetros a serem
 *					executados.
 *	**output:		parâmetro de retorno, será atribuído com a
 *					saída do programa
 *	**hd:			parâmetro de retorno, será atribuído com dados
 *					do cabeçalho
 *
 * retorno: length de *output se tudo der certo; -1 em caso de erro
 *****************************************************************/
int cgibin_exec(vstring *url,vstring *output,header_data **hd);

#endif
